package BasicClass.One;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 思路：
 * 将数组中所有数字异或运算之后，得到的结果为奇数次的两个数组异或的结果a^b
 * a^b!=0一定成立
 * a^b其中有一位一定不为0，而根据这一位可以找出两个奇数次数
 * 找出不为0的这一位rightOne（00001000）
 * 将数组分为两类，（rightOne中当前位为1的）和（rightOne中当前位为0的）
 * 两个数字分别在两个分类中
 * 将分类中所有数据异或，能得到其中一个数，再针对该数与eor异或，就能得到另一个数
 */
public class BasicOne14 {
    public static void main(String[] args) throws IOException {
        BasicOne14 one14 = new BasicOne14();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        int size = Integer.parseInt(bufferedReader.readLine());
        String[] split = bufferedReader.readLine().split(" ");
        int[] nums = new int[size];
        for (int i = 0; i < split.length; i++) {
            nums[i] = Integer.parseInt(split[i]);
        }
        one14.Main(nums);
    }

    /**
     * 给定一个数字arr，其中只有两个数字出现了奇数次，其它数字都出现了偶数次，按照从小到大顺序输出这两个数。
     */
    public void Main(int[] nums) throws IOException {
        int eor = 0;
        for (int i = 0; i < nums.length; i++) {
            eor ^= nums[i];
        }

        int rightOne = eor & (~eor + 1);//提取最右边的1

        int onlyOne = 0;
        for (int num : nums) {
            if((num & rightOne) != 0){
                onlyOne ^= num;
            }
        }
        int minResult = Math.min(onlyOne,(onlyOne^eor));
        System.out.println(minResult+" "+(minResult^eor));
    }
}
